#pragma once


namespace TestDX
{

class D3D11;
class Camera;
class Model;
class Light;
class Shader;

//< Class than handles camera, light, world (even updating it) and rendering
class Graphix
{
public:
	Graphix();
	~Graphix();

	bool Init(int width, int height, void * hwnd);
	void Shutdown();

	//< Prepare world before calling Render
	bool Frame(int, int);

private:
	// Copy and assign are forbidden
	Graphix(const Graphix &);
	Graphix & operator=(const Graphix &);

	//< Renders the scene
	bool Render();

	// Attribs
	D3D11 * _pD3D11;
	Camera * _pCamera;
	Model * _pModel;
	Light * _pLight;
	Shader * _pShader;

	float _rotationY, _rotationZ;

	// Constants
	static const float SCREEN_DEPTH;
	static const float SCREEN_NEAR;
};

}